<?php
/**
 * Smarty Internal Plugin Compile Config Load
 *
 * Compiles the {config load} tag
 *
 * @package    Smarty
 * @subpackage Compiler
 * @author     Uwe Tews
 */

/**
 * Smarty Internal Plugin Compile Config Load Class
 *
 * @package    Smarty
 * @subpackage Compiler
 */
class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {

	/**
	 * Attribute definition: Overwrites base class.
	 *
	 * @var array
	 * @see Smarty_Internal_CompileBase
	 */
	public $required_attributes = array('file');
	/**
	 * Attribute definition: Overwrites base class.
	 *
	 * @var array
	 * @see Smarty_Internal_CompileBase
	 */
	public $shorttag_order = array('file', 'section');
	/**
	 * Attribute definition: Overwrites base class.
	 *
	 * @var array
	 * @see Smarty_Internal_CompileBase
	 */
	public $optional_attributes = array('section', 'scope');

	/**
	 * Compiles code for the {config_load} tag
	 *
	 * @param array  $args     array with attributes from parser
	 * @param object $compiler compiler object
	 *
	 * @return string compiled code
	 */
	public function compile($args, $compiler) {
		static $_is_legal_scope = array('local' => true, 'parent' => true, 'root' => true, 'global' => true);
		// check and get attributes
		$_attr = $this->getAttributes($compiler, $args);

		if ($_attr['nocache'] === true)
		{
			$compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
		}


		// save posible attributes
		$conf_file = $_attr['file'];
		if (isset($_attr['section']))
		{
			$section = $_attr['section'];
		}
		else
		{
			$section = 'null';
		}
		$scope = 'local';
		// scope setup
		if (isset($_attr['scope']))
		{
			$_attr['scope'] = trim($_attr['scope'], "'\"");
			if (isset($_is_legal_scope[$_attr['scope']]))
			{
				$scope = $_attr['scope'];
			}
			else
			{
				$compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno);
			}
		}
		// create config object
		$_output = "<?php  \$_config = new Smarty_Internal_Config($conf_file, \$_smarty_tpl->smarty, \$_smarty_tpl);";
		$_output .= "\$_config->loadConfigVars($section, '$scope'); ?>";

		return $_output;
	}

}

?>
